﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace OcenyOpisowe.Client.Controls
{
	/// <summary>
	/// Klasa bazowa dla wszystkich kontrolek aplikacji Oceny Opisowe.
	/// </summary>
	public abstract class AbstractControl
	{
		#region Prywatne zmienne klasy
		/// <summary>
		/// Kolekcja kontrolek dodanych jako podelementy tej kontrolki.
		/// </summary>
		private readonly List<AbstractControl> _controls;
		/// <summary>
		/// Element dokumentu, z którym powiązana jest ta kontrolka.
		/// </summary>
		private System.Html.Element _domElement;
		/// <summary>
		/// Nadrzędny dla tej kontrolki element HTML.
		/// </summary>
		private System.Html.Element _parentDomElement;
		#endregion

		#region Publiczne właściwości klasy
		/// <summary>
		/// Kolekcja kontrolek dodanych jako podelementy tej kontrolki.
		/// </summary>
		public List<AbstractControl> Controls
		{
			get { return _controls; }
		}
		/// <summary>
		/// Element dokumentu, z którym powiązana jest ta kontrolka.
		/// </summary>
		public System.Html.Element DomElement
		{
			get { return _domElement; }
			set { _domElement = value; }
		}
		/// <summary>
		/// Nadrzędny dla tej kontrolki element HTML.
		/// </summary>
		public System.Html.Element ParentDomElement
		{
			get { return _parentDomElement; }
			set { _parentDomElement = value; }
		}
		#endregion

		#region Konstruktor klasy
		/// <summary>
		/// Inicjuje instancję abstrakcyjnej kontrolki
		/// </summary>
		protected AbstractControl()
		{
			_controls = new List<AbstractControl>();
		}
		#endregion
	}
}
